using System.Text;

namespace Altova
{
	public class HexBinary
	{
		private static string EncodingTable = "0123456789ABCDEF";

		private static sbyte[] aDecodingTable = new sbyte[256]
		{
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, 0, 1,
			2, 3, 4, 5, 6, 7, 8, 9, -1, -1,
			-1, -1, -1, -1, -1, 10, 11, 12, 13, 14,
			15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, 10, 11, 12,
			13, 14, 15, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1
		};

		public static string decode(byte[] v)
		{
			string text = "";
			for (int i = 0; i < v.Length; i++)
			{
				text += EncodingTable[v[i] >> 4];
				text += EncodingTable[v[i] & 0xF];
			}
			return text;
		}

		public static byte[] encode(string s)
		{
			if (s == null)
			{
				return null;
			}
			StringBuilder stringBuilder = new StringBuilder(s);
			stringBuilder.Replace(" ", "");
			stringBuilder.Replace("\t", "");
			stringBuilder.Replace("\n", "");
			stringBuilder.Replace("\r", "");
			string text = stringBuilder.ToString().Trim();
			if (text.Length == 0)
			{
				return new byte[0];
			}
			char[] array = text.ToCharArray();
			byte[] array2 = new byte[array.Length / 2];
			int num = 0;
			int num2 = 0;
			while (num < array.Length)
			{
				sbyte b = aDecodingTable[(uint)array[num++]];
				if (b != -1)
				{
					array2[num2 >> 1] |= (byte)(((num2 & 1) == 1) ? b : (b << 4));
					num2++;
				}
			}
			return array2;
		}
	}
}
